spb/autoscholar
Public
1import { getPaperBySlug } from "@autoscholar/core";2import { handler, json } from "@/lib/server/api";3import { db } from "@/lib/server/db";45export const runtime = "nodejs";67/** Public projection only: never serializes run/worker internals. */8export const GET = handler(async (_req, { params }) => {9 const { slug } = (await params) as { slug: string };10 const p = await getPaperBySlug(db(), slug);11 const v = p.version;12 const withdrawn = (v.metadata as { artifactsWithdrawn?: boolean }).artifactsWithdrawn === true;13 return json(14 {15 ...p.summary,16 metadata: {17 contributions: (v.metadata as Record<string, unknown>).contributions,18 methods: (v.metadata as Record<string, unknown>).methods,19 mainResults: (v.metadata as Record<string, unknown>).mainResults,20 limitations: (v.metadata as Record<string, unknown>).limitations,21 dataAvailability: (v.metadata as Record<string, unknown>).dataAvailability,22 codeAvailability: (v.metadata as Record<string, unknown>).codeAvailability,23 },24 artifacts: withdrawn ? [] : v.artifactSet,25 pdf: withdrawn ? null : v.pdfPublicPath,26 qaSummary: v.qaSummary,27 provenance: v.provenance,28 versions: p.versions.map((x) => ({29 versionNo: x.versionNo,30 publishedAt: x.publishedAt,31 changelog: x.changelog,32 pdf: withdrawn ? null : x.pdfPublicPath,33 })),34 corrections: p.corrections,35 retraction: p.retraction36 ? { notice: p.retraction.notice, retractedAt: p.retraction.retractedAt }37 : null,38 related: p.related,39 disclosure: "AI-generated working paper; not formally peer reviewed. Research computed on MacLustr.",40 },41 { headers: { "cache-control": "public, max-age=120, stale-while-revalidate=600" } },42 );43});44